#include <stdio.h>

#define       N     6

int kuaipai(int *pa,int left,int right)
{
    if (left >= right)
    {
        return 0;
    }
    int i = left;
    int j = right;
    int key = pa[i]; // key 值 = 数组的第一个元素的值

    while (i < j) // i>=j 时表示碰头，i<j 不碰头的时候循环
    {
        /****移动 j ****/
        while (i < j && key <= pa[j]) //移动到pa[j] < key时，停止递减,
        {
            j--; // j向前（减小）移动
        }
        //移动完毕后，把 i 下标的值和 j 下标的值交换
        int t = pa[i];
        pa[i] = pa[j];
        pa[j] = t; 

        /****移动 i ****/
        while (i < j && key >= pa[i])
        {
            i++; // i向后（增加）移动
        }

        t = pa[i];
        pa[i] = pa[j];
        pa[j] = t;
    }


    kuaipai(pa,left,i-1);
    kuaipai(pa,i+1,right);
    return 0;
}

int main(int argc, char const *argv[])
{
    int a[N] = {0};
    for (int i = 0; i < N; i++)
    {
        printf("请输入第 %d 个数 >:", i + 1);
        scanf("%d", &a[i]);
    }
    printf("数组的内容为:");
    for (int i = 0; i < N; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
    kuaipai(a,0,N-1);

    printf("快排的内容为:");
    for (int i = 0; i < N; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");

    return 0;
}
